import asyncio
import os

import semantic_kernel as sk
from dotenv import load_dotenv, find_dotenv
from semantic_kernel.connectors.ai.open_ai.services.open_ai_chat_completion import OpenAIChatCompletion


_ = load_dotenv(find_dotenv())
# 创建 semantic kernel
kernel = sk.Kernel()
# 配置 OpenAI 服务。OPENAI_BASE_URL 会被自动加载生效
api_key = os.getenv("OPENAI_API_KEY")
serviceId = "default"
# 将 LLM 服务添加到 kernel 中
kernel.add_service(
    OpenAIChatCompletion(
        service_id=serviceId,
        ai_model_id="gpt-3.5-turbo-1106",
        api_key=api_key
    )
)
# Prompt 调用大模型，被当做一个 Semantic Function
joke_function = kernel.add_function(
    function_name="joke",  # function 名字，必填
    plugin_name="DemoPlugin",  # function 所属的 plugin，必填
    prompt="周杰伦的出生日期是多少，格式要求是yyyy-MM-dd "  # prompt，必填
)


async def runAsyncFunc(*args):
    return await kernel.invoke(*args)


# 运行 function 看结果
result = asyncio.run(
    runAsyncFunc(joke_function)
)
print(result)
'''
用我们熟悉的操作系统来类比，可以更好地理解 SK。
启动操作系统：kernel = sk.Kernel()
安装驱动程序：kernel.add_service()
安装应用程序：func = kernel.add_function()
运行应用程序：kernel.invoke(func...)
'''
